package xian.woniuxy.zh_generic.e;

/*
    泛型擦除：

    1. java中的泛型，是伪泛型
    2. 伪泛型会在编译之后，字节码当中就已经把泛型擦除了（只留有微弱的记忆，字节码中只有存放了泛型的名字）
    3. 为什么java要做成伪泛型，而不做成真泛型？ （C#就是真泛型）
       为了向前兼容，泛型是在jdk1.5版本中发布的新特性，那个时候，java程序遍布全球，跑了好几年
       如果java直接做成真泛型的形式，则以前的程序都会崩溃，因为1.5以前是不支持泛型的，一旦更新了
       jdk的版本，以前的程序由于不支持泛型就会报错！ 所以java斟酌之后，才搞出个伪泛型

    4. 这个伪泛型机制，的特点是，在编译的过程中，会起到保护类型的作用，一旦编译通过，生成的字节码中是没有泛型。
    这样，泛型就能和以前不支持泛型的程序一起工作，毕竟1.5以前版本的字节码中也没有泛型信息。

    5. 由于java这种伪泛型的机制，也导致了一些缺点，我们不能调用泛型的方法，因为运行时是没有具体类型的信息的
    只能调用Object的方法！
 */

import java.util.ArrayList;
import java.util.List;

class Foo<T> {
    public void f1(T t) {
        t.toString();
        t.equals(1);
        t.hashCode();
        t.getClass();
    }
}

public class App {

    public static void main(String[] args) {
        Foo<String> foo = new Foo<String>();
        foo.f1("a");
    }
}
